<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
   
  </head>
  <body>
    <div id="app">
      <input type="text" v-model="msg">
      <br>
      {{msg}}

      <hr>
      <button @click="addArr">新增li</button>
      <ul id="oul">
        <li v-for="item in arr" :key="item">
          {{item}}
        </li>
      </ul>
    </div>

    <script src="./vue.global.js"></script>
    <script>
      const { createApp } = Vue;
      const app = createApp({
        data() {
          return {
            msg: 'vue',
            arr: [1,2,3,4]
          };
        },
        methods: {
          addArr(){
            const oul = document.querySelector('#oul');
            this.arr.push(this.arr.length+1);
          }
        },
        // 在config对象中定义 watch属性即可
        watch: {
          // 1 基本数据类型 直接在watch属性中定义同名的方法即可
          msg(newVal, oldVal){
            console.log('msg改变了新值', newVal);
          },
          // 2 侦听引用类型  深度侦听 （侦听 引用类型中 所有 值或者属性的变化）
          arr: {
            // 侦听器函数
            handler(val){
              console.log('arr改变了', val);
              // const oul = document.querySelector('#oul');
              // oul.lastElementChild.style.background = 'red';
            },
            // 深度侦听
            deep: true,
            // 默认侦听器 是 数据修改后立即触发， 添加 flush: 'post' 可以让侦听器 在此次数据修改后且视图刷新完成后触发
            flush: 'post',
            immediate: true
          }
        }
      });
      app.mount("#app");
    </script>
  </body>
</html>
